/***************************************************************************
 创建者: 华磊
 开始时间: 2018.8.14
 copyright: (C) 华友高科
 修改说明: (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 example (1) hualei 2017.5.8 类的具体实现代码编写

 ***************************************************************************
 *  @file x.h
 *  功能:
 *
 *                                                                         *
 ***************************************************************************/
#ifndef FORINSTRUCTION_H
#define FORINSTRUCTION_H

#include "instructionEnum.h"
//#include <QMap>
//#include <QList>
#include <QMultiMap>
#include <QPair>


/**
 * @brief The ForInstruction class 　指令信息提取类
 */
class ForInstruction
{
public:
    ForInstruction();

    friend QDataStream& operator <<(QDataStream &out,ForInstruction &myVector);

    friend QDataStream& operator >>(QDataStream &in,ForInstruction &myVector);

    /*** for指令里的action指令，包含TO和DOWNTO*/
    FOR_ACTION_TYPE actionType;
    /**for指令里的initial类型，包括constant,R[i],AR[i]*/
    FOR_INITITAL_VALUE initialType;
    /**for指令里的target值类型，包括constant,R[i],AR[i]*/
    FOR_TARGET_VALUE targetType;

    /**for指令里的register(寄存器)的序号*/
    int registerNum;
    /**for指令里的initial值，当FOR_INITITAL_VALUE为constant类型时直接赋值，为R[i]或AR[i]时当作i值传入*/
    int initialValue;
    /**for指令里的target值，当FOR_INITITAL_VALUE为constant类型时直接赋值，为R[i]或AR[i]时当作i值传入*/
    int targetValue;

    /**ForInstruction类里的一个标志位，当action指令为To时该标识为true，当action指令为DOWNTO时该标识为false*/
    bool forFlag;
    /**ForInstruction类里的一个标志位，初始化值必须为true，表示第一次进入此命令行，会添加相关数据到容器，当执行完此行后将标识位设置为false，再次进入此行则不会添加以及查找*/
    bool firstFlag;

    //int forCount;
    /**执行完了for endfor*/
    //bool endForFlag;
    /**********************************
     * 日期：2017－2－18
     * 修改人：ｓｔｅｖｅｎ
     * 修改目的：添加记录Ｆｏｒ执行完的标志
     * ********************************/
    /**
     * @brief forCompleteFlag
     */
    bool forCompleteFlag;

};




//typedef QPair< QPair<int,bool>, QPair<int,int> > mapPairFor;

//QMap <int,QMap<int,QPair<int,bool>>> mapListfor;

#endif // FORINSTRUCTION_H
